package com.example.multilevelapprovalback.config;

import com.example.multilevelapprovalback.service.impl.FileServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
    //跨域配置方法
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**") //指定允许跨域访问的路径。 /** 表示允许所有路径的跨域访问
//                .allowedOrigins("http://localhost:5173")  //指定允许跨域访问的源
                .allowedOriginPatterns("*")  //指定允许跨域访问的源
                .allowedMethods("GET", "POST", "PUT", "OPTIONS", "DELETE", "PATCH")  //指定允许的请求方法
                .allowedHeaders("*") //指定允许的请求头， * 表示允许所有请求头
                .allowCredentials(true);  //指定允许发送身份验证信息（如Cookies、HTTP认证或客户端SSL证书）
    }
    @Autowired
    FileServiceImpl fileService;

    //静态资源路径配置
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        /**
         * 将匹配上/files/**虚拟路径的url映射到文件上传到服务器的目录，获取静态资源
         * "file:"表示文件系统协议，即资源是文件系统中的一个路径
         * addResourceLocations("file:" + fileService.filePath) 的配置告诉 Spring MVC 在处理 /fileService.pathPattern/** 虚拟路径的请求时，
         * 应该在文件系统中查找资源，并且资源的根路径是 fileService.filePath。这样，通过 /files/** 访问的 URL 就会映射到服务器上实际的文件路径。
         */
        registry.addResourceHandler("/" + fileService.pathPattern + "/**").addResourceLocations("file:" +fileService.filePath);
        /**
         * WebMvcConfigurer.super.addResourceHandlers(registry)： 调用了 WebMvcConfigurer 接口的默认实现，确保其他默认的资源处理规则也能够正常工作。
         */
        WebMvcConfigurer.super.addResourceHandlers(registry);
    }
}
